﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GTA
{
    public class BaseUserControl : UserControl
    {
        #region Local Objects
        protected SortOrder sortOrder = SortOrder.Descending;
        protected Int32 columnOrder = Int32.MinValue;
        #endregion

        #region Constants
        protected const string DATE_FORMAT = "dd/MM/yyyy";
        protected const string DATE_FORMAT_FULL = "dd/MM/yyyy - HH:mm:ss";
        #endregion

        protected void HandleException(String operation, Exception ex)
        {
            CustomMessageBox.CustomMessageBox.ShowError(operation, this, ex);
        }
        protected Form GetParentForm(UserControl ctrl)
        {
            Form parent = null;
            if (ctrl != null)
            {
                if (ctrl.Parent is Form)
                    parent = ctrl.Parent as Form;
                else
                    parent = GetParentFormControl(ctrl.Parent);
            }
            return parent;
        }
        private Form GetParentFormControl(Control control)
        {
            Form parent = null;
            if (control != null)
            {
                if (control.Parent is Form)
                    parent = control.Parent as Form;
                else
                    parent = GetParentFormControl(control.Parent);
            }
            return parent;
        }
        protected void SortList(ListView lista, OrdenacaoListView.Tipo tipoColuna, ref Int32 columOrder, ref SortOrder sentidoOrder, Int32 column)
        {
            try
            {
                if (columOrder == Int32.MinValue)
                    columOrder = column;

                if (columOrder == column)
                {
                    if (sentidoOrder == SortOrder.Ascending)
                        sentidoOrder = SortOrder.Descending;
                    else
                        sentidoOrder = SortOrder.Ascending;
                }
                else
                    columOrder = column;

                lista.Sorting = sentidoOrder;
                SortListView(lista, column, tipoColuna);
            }
            catch (Exception ex)
            {
                HandleException("Ordenar Lista", ex);
            }
        }
        private void SortListView(ListView lista, int column, OrdenacaoListView.Tipo tipo)
        {
            switch (tipo)
            {
                case OrdenacaoListView.Tipo.Alfabetica:
                    switch (lista.Sorting)
                    {
                        case SortOrder.Ascending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Alfabetica, OrdenacaoListView.Direcao.Ascendente);
                            break;
                        case SortOrder.Descending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Alfabetica, OrdenacaoListView.Direcao.Descendente);
                            break;
                        case SortOrder.None:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Alfabetica, OrdenacaoListView.Direcao.Ascendente);
                            break;
                    }
                    break;
                case OrdenacaoListView.Tipo.Numerica:
                    switch (lista.Sorting)
                    {
                        case SortOrder.Ascending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Numerica, OrdenacaoListView.Direcao.Ascendente);
                            break;
                        case SortOrder.Descending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Numerica, OrdenacaoListView.Direcao.Descendente);
                            break;
                        case SortOrder.None:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Numerica, OrdenacaoListView.Direcao.Ascendente);
                            break;
                    }
                    break;
                case OrdenacaoListView.Tipo.Decimal:
                    switch (lista.Sorting)
                    {
                        case SortOrder.Ascending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Decimal, OrdenacaoListView.Direcao.Ascendente);
                            break;
                        case SortOrder.Descending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Decimal, OrdenacaoListView.Direcao.Descendente);
                            break;
                        case SortOrder.None:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Decimal, OrdenacaoListView.Direcao.Ascendente);
                            break;
                    }
                    break;
                case OrdenacaoListView.Tipo.Data:
                    switch (lista.Sorting)
                    {
                        case SortOrder.Ascending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Data, OrdenacaoListView.Direcao.Ascendente);
                            break;
                        case SortOrder.Descending:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Data, OrdenacaoListView.Direcao.Descendente);
                            break;
                        case SortOrder.None:
                            lista.ListViewItemSorter = new OrdenacaoListView(column, OrdenacaoListView.Tipo.Data, OrdenacaoListView.Direcao.Ascendente);
                            break;
                    }
                    break;
            }
            lista.Sort();
        }
    }
}
